﻿using MongoDB.Bson;

namespace YFurion.Application
{
    /// <summary>
    /// 方法包括：CURD、获取全部、分页获取 
    /// </summary>
    /// <typeparam name="TEntityDto"></typeparam>
    /// <typeparam name="TGetAllInput"></typeparam>
    public interface IMongoDBApplicationService<TEntityDto,  in TGetAllInput> : IMongoDBApplicationService<TEntityDto,  TGetAllInput, TEntityDto>
        where TEntityDto : class, IEntityDto<ObjectId>
    {
    }

    /// <summary>
    /// 方法包括：CURD、获取全部、分页获取 
    /// </summary>
    /// <typeparam name="TEntityDto"></typeparam>
    /// <typeparam name="TGetAllInput"></typeparam>
    /// <typeparam name="TCreateInputDto"></typeparam>
    public interface IMongoDBApplicationService<TEntityDto,in TGetAllInput, in TCreateInputDto> : IMongoDBApplicationService<TEntityDto,  TGetAllInput, TCreateInputDto, TCreateInputDto>
        where TEntityDto : class, IEntityDto<ObjectId>
        where TCreateInputDto : class, IEntityDto<ObjectId>
    {
    }

    /// <summary>
    /// 方法包括：CURD、获取全部、分页获取 
    /// </summary>
    /// <typeparam name="TEntityDto"></typeparam>
    /// <typeparam name="TGetAllInput"></typeparam>
    /// <typeparam name="TCreateInputDto"></typeparam>
    /// <typeparam name="TUpdateInputDto"></typeparam>
    public interface IMongoDBApplicationService<TEntityDto, in TGetAllInput, in TCreateInputDto, in TUpdateInputDto> : IApplicationService<TEntityDto, ObjectId, TGetAllInput, TCreateInputDto, TUpdateInputDto>
        where TEntityDto : class, IEntityDto<ObjectId>
        where TCreateInputDto : class, IEntityDto<ObjectId>
        where TUpdateInputDto : class, IEntityDto<ObjectId>
    {
    }
}
